package com.bdqn.ch01.Sl;

import java.lang.reflect.Field;

/**
 * AccessPersonFields
 * 示例8
 * @aurhor Administrator  whs
 * @since 2024/6/26
 */
public class AccessPersonFields {
    public static void main(String[] args) {

//        通过反射操作Person

        try {
            Class cls = Class.forName("com.bdqn.ch01.Sl.Person");
            Object person = cls.newInstance();

            // 调用类中的方法和属性 对象名.方法 对象名.属性
            //获取name属性
            Field name = cls.getDeclaredField("name");

            // name 的属性为private , 这里已经超出其访问范围 ，不能直接访问
            // 通过 setAccessible 方法 可以访问到
            name.setAccessible(true);
            System.out.println("赋值前的name: "+name.get(person));

            // 为name 赋值
            name.set(person,"new Person");  // 相当于调用了setName("New Person")
            System.out.println("赋值后的name: "+name.get(person));

            /**
             * 赋值前的name: null
             * 赋值后的name: new Person
             */


        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (NoSuchFieldException e) {
            throw new RuntimeException(e);
        }
    }
}
